1. Field of the Invention
This invention is related to the field of distributed simulation systems.
2. Description of the Related Art
Generally, the development of components for an electronic system such as a computer system includes simulation of models of the components. In the simulation, the specified functions of each component may be tested and, when incorrect operation (a bug) is detected, the model of the component may be changed to generate correct operation. Once simulation testing is complete, the model may be fabricated to produce the corresponding component. Since many of the bugs may have been detected in simulation, the component may be more likely to operate as specified and the number of revisions to hardware may be reduced. The models are frequently described in a hardware description language (HDL) such as Verilog, VHDL, etc. The HDL model may be simulated in a simulator designed for the HDL, and may also be synthesized, in some cases, to produce a netlist and ultimately a mask set for fabricating an integrated circuit.
Originally, simulations of electronic systems were performed on a single computing system. However, as the electronic systems (and the components forming systems) have grown larger and more complex, single-system simulation has become less desirable. The speed of the simulation (in cycles of the electronic system per second) may be reduced due to the larger number of gates in the model which require evaluation. Additionally, the speed may be reduced as the size of the electronic system model and the computer code to perform the simulation may exceed the memory capacity of the single system. As the speed of the simulation decreases, simulation throughput is reduced.
To address some of these issues, distributed simulation has become more common. Generally, a distributed simulation system includes two or more computer systems simulating portions of the electronic system in parallel. Each computer system must communicate with other computer systems simulating portions of the electronic system to which the portion being simulated on that computer system communicates, to pass signal values of the signals which communicate between the portions. Generally, distributed simulation systems sample output signals from the model in each node and communicate the corresponding signal states to other nodes. The received signal states are then driven as inputs to the models in those other nodes.
In such a simulation, skew may be experienced for some signals (as compared to the signals produced by the corresponding hardware). For example, signals which are asynchronous may change state at any time. A first node in the distributed simulation system may simulate a first model which drives a first output signal. The first output signal may be an input signal to a second model in a second node. The input signal to the second model may asynchronously cause a second output signal of the second model to change state during the same simulation timestep as the input signal is received. However, the second output signal is actually sampled in the next simulation time step (and thus the second output signal may affect receiving nodes in the next simulation time step). In contrast, in a single simulation image, the second output signal may affect receiving models in the same simulation timestep.
A glitch may be experienced for bi-directional signals (signals which may act as both inputs and outputs at different times). The bi-directional signal drivers may be located in different nodes, and thus the simulator in a given node may not have the states for all the drivers on a given bi-directional signal. Accordingly, resolving the value on the bi-directional signal line at a given time step may involve multiple nodes. Typically, the value on the bi-directional line from each node is transmitted to a central point, which resolves the value for the bi-directional line and transmits the resolved value to each of the nodes. However, simulator time progresses in each node while the central point is resolving the state, and the value on the bi-directional signal line in each node may be the value driven by the local model in that node until the central point returns the resolved value.
Test monitor code or test stimulation code is often used in distributed simulation systems. Frequently, such code may sample or change the values of various signals (or internal facilities such as registers) to determine if a simulation is operating properly or to cause a desired test event to occur. Such sampling and changing of values may also cause skew in the simulation. For example, reading a register may involve placing a value on the inputs of the model including the register. The input values are values which cause the model to output the register's contents. Simulator time may then advance by one or more timesteps to receive the register result.